import { ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
// 增删改查逻辑模板
/**
 * 
 * @param {*} pageQueryForm 查询表单
 * @param {*} pageSubmitForm 提交表单
 * @param {*} pageSubmitFormRules 提交表单验证规则
 * @param {*} queryList 查询列表接口
 * @param {*} addInfo 新增接口
 * @param {*} deleteInfo 删除接口
 * @param {*} updateInfo 修改接口
 * @returns { Object } queryForm, // 查询表单
 * @returns { Element } queryFormRef, // 查询表单REF
 * @returns { Array } dataList, // 数据列表
 * @returns { Number } totalcount,// 数据总数
 * @returns { Object } submitForm, // 提交表单
 * @returns { Object } submitFormRules, // 提交表单校验规则
 * @returns { Element } submitFormRef, // 	提交表单REF
 * @returns { Object } dialogConfig, // 对话框配置
 * @returns { Function } handelResetQueryForm,// 重置搜索表单
 * @returns { Function } handelSearch, // 搜索
 * @returns { Function } handleSizeChange,// 页码大小改变
 * @returns { Function } handleCurrentChange,// 页码改变
 * @returns { Function } featchDataList,// 查询数据列表
 * @returns { Function } handelDeleteMore, // 批量删除
 * @returns { Function } handleSelectionChange, // 表格选中数据	
 * @returns { Function } handelAdd, // 新增
 * @returns { Function } handelUpdate, // 修改	
 * @returns { Function } handelSubmitForm, // 提交表单	
 * @returns { Function } handelCloseDialog, // 关闭弹框	
 * @returns { Function } handelDelete // 删除	
 */

export function usePagesOption ({
	pageQueryForm: pageQueryForm,
	pageSubmitForm: pageSubmitForm,
	pageSubmitFormRules: pageSubmitFormRules,
	queryList: queryList,
	addInfo: addInfo,
	deleteInfo: deleteInfo,
	updateInfo:updateInfo
}) {
	console.log('pageQueryForm', pageQueryForm)
	// 查询数据表单
	const queryForm = ref(pageQueryForm);
	// 查询表单REF
	const queryFormRef = ref(null)
	// 数据列表
	const dataList = ref([
		{
			id: '1',
			name:'类型一'
		}
	]);
	// 数据总数
	const totalcount = ref(0);
	// 选中的数据
	const selectedData = ref([]);
	// 数据提交表单
	const submitForm = ref(pageSubmitForm);
	// 提交表单校验规则
	const submitFormRules = ref(pageSubmitFormRules)
	// 提交表单REF
	const submitFormRef = ref(null);
	// 弹框配置
	const dialogConfig = ref({
		// 弹框标题
		title: '提示',
		// 弹框类型
		type: '',
		// 弹框显示状态
		show: false,
	});
	////////////////////////////////////////数据查询相关逻辑///////////////////////////////////////////////////////
	// 重置搜索表单
	const handelResetQueryForm = (formEl) => {
		if (!formEl) return
		console.log('pageQueryForm------', pageQueryForm)
		queryForm.value = {...pageQueryForm};
		console.log('queryForm.value------', queryForm.value)
		formEl.resetFields()
		queryForm.value.current = 1;
		featchDataList();
	}
	// 搜索
	const handelSearch = () => { 
		queryForm.value.current = 1;
		featchDataList();
	}
	// 页码大小改变
	const handleSizeChange = (val) => { 
		queryForm.value.current = 1;
		featchDataList();
	}
	// 页码改变
	const handleCurrentChange = (val) => {
		// 调用获取数据列表函数
		featchDataList();
	}
	// 查询数据列表
	const featchDataList = async () => {
		let res = await queryList(queryForm.value);
		if(res && res.code === 0) { 
			dataList.value = res.data.list;
			totalcount.value = res.data.totalCount;
		} else {
			dataList.value = [];
			totalcount.value = 0;
		}
	}
	// 批量删除
	const handelDeleteMore = () => { 
		console.log('selectedData', selectedData.value)
		if (selectedData.value.length === 0) {
			ElMessage.warning('请选择要删除的数据');
		} else {
			ElMessageBox.confirm('此操作将永久删除选中数据, 是否继续?', '提示', {
				confirmButtonText: '确定',
				cancelButtonText: '取消',
				type: 'warning',
			}).then(async () => {
				let res = await deleteInfo(selectedData.value);
				if(res && res.code === 0){
					ElMessage.success('删除成功');
				} else {
					ElMessage.error('删除失败');
				}
				featchDataList();
			}).catch(() => {
				ElMessage.info('已取消删除');
			});
		}
	}
	// 表格选中数据
	const handleSelectionChange = (val,key) => {
		selectedData.value = []
		val.forEach(element => {
			selectedData.value.push(element[key])
		});
	}
	////////////////////////////////////////数据操作相关逻辑///////////////////////////////////////////////////////
	// 新增
	const handelAdd = () => { 
		dialogConfig.value = {
			title: '新增',
			type: 'add',
			show: true,
		}
	}
	// 修改
	const handelUpdate = (row) => { 
		submitForm.value = {...row};
		dialogConfig.value = {
			title: '修改',
			type: 'update',
			show: true,
		}
	}
	// 删除
	const handelDelete = (row) => {
		ElMessageBox.confirm('此操作将永久删除选中数据, 是否继续?', '提示', {
			confirmButtonText: '确定',
			cancelButtonText: '取消',
			type: 'warning',
		}).then(async () => {
			let res = await deleteInfo([row.categoryId]);
			if(res && res.code === 0){
				ElMessage.success('删除成功');
			} else {
				ElMessage.error('删除失败');
			}
			featchDataList();
		}).catch(() => {
			ElMessage.info('已取消删除');
		});
	}
	// 重置提交表单
	const handelResetSubmitForm = (formEl) => { 
		if (!formEl) return
		if(formEl.value){
			formEl.value.resetFields()
		} else {
			formEl.resetFields()
		}
		submitForm.value = pageSubmitForm;
	}
	// 提交表单
	const handelSubmitForm = (formEl) => {
		formEl.validate(async (valid) => { 
			if (valid) { 
				if (dialogConfig.value.type === 'add') { 
					let res = await addInfo(submitForm.value);
					if(res && res.code === 0) {
						ElMessage.success('新增成功！');
						handelCloseDialog(formEl);
					} else {
						ElMessage.error('新增失败！');
						handelCloseDialog(formEl);
					}
					featchDataList();
				} else { 
					let res = await updateInfo(submitForm.value);
					if(res && res.code === 0) {
						ElMessage.success('修改成功！');
						handelCloseDialog(formEl);
					} else {
						ElMessage.error('修改失败！');
						handelCloseDialog(formEl);
					}
					submitForm.value = pageSubmitForm;
					featchDataList();
				}
			}
		})
	}
	// 关闭弹框
	const handelCloseDialog = (formEl) => {
		handelResetSubmitForm(formEl);
		dialogConfig.value.show = false;
	}
    return {
		queryForm,
		queryFormRef,
		dataList,
		totalcount,
		submitForm,
		submitFormRules,
		submitFormRef,
		dialogConfig,
		handelResetQueryForm,
		handelSearch,
		handleSizeChange,
		handleCurrentChange,
		featchDataList,
		handelDeleteMore,
		handleSelectionChange,
		handelAdd,
		handelUpdate,
		handelSubmitForm,
		handelCloseDialog,
		handelDelete
    }
}
